package com.jmb.demo2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 1. 这个地方我们演示的是@Autowired，@Autowired是一个自动注入我们引用类型。
 * 2. @Qualifier是指向我们的bean(id)一样。类似于通过byName获取
 * 3. 然后@Value其实本质已经代替了set方法，然后我们可以省略set方法的编写，但是不可以省略get方法，要不然会输出为空。
 * 4. @Autowired(required=ture)：表示引用类型赋值失败，程序报错，并终止执行， 默认是为true
 * 5. @Autowired(required=false): 引用类型赋值失败，程序正常执行，然后引用的类型是Null.
 * 6. @Re
 */

@Component
public class Student {
//    @Value("金博博")
    @Value("${name}")
    private String name;
//    @Value("河南开封")
    @Value("${adders}")
    private String adders;
//    @Value("24")
    @Value("${age}")
    private Integer age;
    // 这个地方我们用到了一个引用类型,注解方式是通过@Autowired，@Autowired代表的是引入我们的引用类型的，他的本质是直接引用我们的类型。
     // @Autowired
    // @Qualifier("mySchool") // 这个指向的就是类似于我们bean的(id)值一样。如果Autowired是引用byType,那么这个@Qualifier就是引用byName
    // 使用一个java自带的注解，然后也是自动找byName,找不到byName会找,byType，我们也可以声明name=我们bean的 id。
    @Resource(name = "mySchool2")
    private School school;
    public Student() {
        System.out.println("我们的Student Demo1无参构造");
    }

    public String getName() {
        return name;
    }

    public String getAdders() {
        return adders;
    }

    public Integer getAge() {
        return age;
    }

    public School getSchool() {
        return school;
    }
}
